def lcs_length(x,y):
    m=len(x)
    n=len(y)
    c=[[0 for _ in range(n+1)] for _ in range(m+1)]

    for i in range(1,m+1):
        for j in range(1,n+1):
            #如果两个字符串的最后一位相等
            if x[i-1]==y[j-1]:
                #最长子串等于两个字符串各减去一个字符+1
                c[i][j]=c[i-1][j-1]+1
            #如果两个字符串不相等
            else:
                #最长子串为其中一个字符串减去一位的最大子串的最大值
                c[i][j]=max(c[i-1][j],c[i][j-1])
    return max(max(c))

def lcs(x,y):
    m=len(x)
    n=len(y)
    c = [[0 for _ in range(n + 1)] for _ in range(m + 1)]
    b = [[0 for _ in range(n + 1)] for _ in range(m + 1)] #1左上方 #2上方 #3左方
    for i in range(1,m+1):
        for j in range(1,n+1):
            #如果两个字符串的最后一位相等
            if x[i-1]==y[j-1]:
                #最长子串等于两个字符串各减去一个字符+1
                c[i][j]=c[i-1][j-1]+1
                b[i][j]=1
            #如果两个字符串不相等
            else:
                if c[i-1][j]>c[i][j-1]:
                    c[i][j]=c[i-1][j]
                    b[i][j]=2
                else:
                    c[i][j]=c[i][j-1]
                    b[i][j]=3
    return b

def lcs_print(b,x,y):
    ans=[]
    i = len(x)
    print(i)
    j=len(y)
    print(j)
    while i>0 and j>0:
        if b[i][j]==1: #来自左上方=>匹配
            ans.append(x[i-1])
            i=i-1
            j=j-1
        elif b[i][j]==2: #来自于上方，不匹配
            i=i-1
        elif b[i][j]==3: #来自于左方，不匹配
            j=j-1
        else:
           break
    return "".join(reversed(ans))

x='214214214'
y='1323423'
b=lcs(x,y)

print(lcs_print(b,x,y))